//class Solution {
//public:
//    int longestArithSeqLength(vector<int>& nums) {
//        int n = nums.size();
//        unordered_map<int, int> hash;
//        hash[nums[0]] = 0;
//        vector<vector<int>> dp(n, vector<int>(n, 2));
//        int ret = 2;
//        for (int i = 1; i < n; i++)
//        {
//            for (int j = i + 1; j < n; j++)
//            {
//                int a = 2 * nums[i] - nums[j];
//                if (hash.count(a))
//                {
//                    dp[i][j] = dp[hash[a]][i] + 1;
//                }
//                ret = max(ret, dp[i][j]);
//            }
//            hash[nums[i]] = i;
//        }
//        return ret;
//    }
//};

//class Solution {
//public:
//    int numberOfArithmeticSlices(vector<int>& nums) {
//        int n = nums.size();
//        unordered_map<long long, vector<long long>> hash;
//        for (int i = 0; i < n; i++) hash[nums[i]].push_back(i);
//        long long sum = 0;
//        vector<vector<int>> dp(n, vector<int>(n));
//        for (int j = 2; j < n; j++)
//        {
//            for (int i = 1; i < j; i++)
//            {
//                long long a = (long long)2 * nums[i] - nums[j];
//                if (hash.count(a))
//                {
//                    for (auto& k : hash[a])
//                    {
//                        if (k < i) dp[i][j] += dp[k][i] + 1;
//                    }
//                }
//                sum += dp[i][j];
//            }
//        }
//        return sum;
//    }
//};